import pandas as pd
import geopandas as gpd
import plotly.graph_objects as go
import warnings
from shapely.errors import ShapelyDeprecationWarning
# Suppress specific warnings
warnings.filterwarnings("ignore", category=ShapelyDeprecationWarning)
# Read shapefiles and data
gemeenten_shapefile = 'gadm41_NLD_1.shp'
gdf = gpd.read_file(gemeenten_shapefile)
gdf = gdf[~gdf['NAME_1'].isin(['Zeeuwse meren', 'IJsselmeer'])]
gdf.loc[gdf['NAME_1'] == 'Fryslân', 'NAME_1'] = 'Friesland'
gdf.loc[gdf['NAME_1'] == 'NA', 'NAME_1'] = 'Zuid-Holland'
dataset = pd.read_csv('inkomen_van_personen__persoonskenmerken.csv', sep=',', thousands='.')[0:12]
dataset['Mediaan persoonlijk inkomen'] = dataset['Mediaan persoonlijk inkomen'].str.replace(',', '.').astype(float)
merged = gdf.merge(dataset, how='left', left_on='NAME_1', right_on='Regio\'s')
# Define the GeoJSON
counties_geojson = merged.__geo_interface__
# Create Plotly figure
fig = go.Figure(go.Choroplethmapbox(
geojson=counties_geojson,
locations=merged.index,
z=merged['Mediaan persoonlijk inkomen'],
colorscale='reds',
zmin=merged['Mediaan persoonlijk inkomen'].min(),
zmax=merged['Mediaan persoonlijk inkomen'].max(),
marker_opacity=0.5,
marker_line_width=0,
hovertemplate='<b>%{properties.NAME_1}</b><br>' +
'Mediaan inkomen: %{z:.2f} (x1,000€) <extra></extra>', # Custom hover information
))
# Update layout
fig.update_layout(
mapbox_style="carto-positron",
mapbox_zoom=5,
mapbox_center={"lat": 52.1326, "lon": 5.2913},
margin={"r": 0, "t": 30, "l": 0, "b": 0}, # Adjust top margin for title
title='Mediaan persoonlijk inkomen in Nederlandse provincies ', # Title of the plot
coloraxis_colorbar=dict(
title='Color bar title', # Color bar title
ticksuffix=' €', # Suffix for color bar ticks
)
)
# Show the figure
fig.show()